
/**
 * @File	logout.h
 * @brief	日志功能头文件.
 * @auhtor	Alan
 * @data	2008-8-25 23:43
 * @see		logout.c
 * $Id$
**/

#ifndef	__ZC_LOG_H__
#define __ZC_LOG_H__

#define LOG_NONE		0   /// 无日志.
#define LOG_STDOUT	    1   /// 输出到控制台.
#define LOG_FILE		2   /// 输出到文件.
#define LOG_UDP			3   /// 输出到文件.

#define LOG_LINE_CNT	128     /// 缓存的日志条数.
#define LOG_LINE_SIZE	256     /// 每条记录的长度.
#define LOG_FILE_SIZE	102400  /// 每个文件的行数.

typedef struct zc_log_tt zc_log_t;

/// 不要直接使用日志函数.
int zc_log_init(zc_log_t *log, const char *label, int level, int flag, int fd, char *ip, short port);
int zc_log_open(zc_log_t *log);
static void zc_log_flush(zc_log_t *log);
int zc_log_close(zc_log_t *log);
int zc_log(const char *file, const char *func, const int line,
           zc_log_t *log, const int level, const char *fmt, ...);


/// 使用定义的宏.
#define ZC_LOGINIT(t,u,v,w,x,y,z)     zc_log_init(t,u,v,w,x,y,z)
#define ZC_LOGOPEN(x)	        zc_log_open(x)
#define ZC_LOGCLOSE(x)		    zc_log_close(x)

#define ZC_LOG_ERR(...) 	    zc_log(__FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)


/// 定义日志输出的宏.
#ifdef USER_LOG

#define ZC_LOG(...) 	    zc_log(__FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)

#define ZC_LOG_INFO(...) 	zc_log(__FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
#define ZC_LOG_ERROR(...) 	zc_log(__FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)

#define ZC_LOG_ENTER(x)     LOGOUT(x, 1, " * Enter\n")
#define ZC_LOG_EXIT(x)      LOGOUT(x, 1, " * Exit\n")

#define ZC_LOG_MSGIN(x)     LOGOUT(x, 1, " * <<-- \n")
#define ZC_LOG_MSGOUT(x)    LOGOUT(x, 1, " * -->> \n")

#else                           /* USER_LOGOUT */

#define ZC_LOG(...)

#define ZC_LOG_INFO()
#define ZC_LOG_ERROR()

#define ZC_LOG_ENTER()
#define ZC_LOG_EXIT()

#define ZC_LOG_MSGIN()
#define ZC_LOG_MSGOUT()

#endif                          // USER_LOG

#endif                          // __ZC_LOG_H__
